/*******************************************************************************
* company    : 六瓜编程 2010-2020
* description: 
* date: 2020-12-13 00:53:59
* author : XiaoShengYang
*******************************************************************************/

#ifndef __MOTION_OAL_H
#define __MOTION_OAL_H
#include <lg_types.h>
#include <lg_timer.h>

/* 寻迹模式 */
enum mode {
    TRACE = 0,
    REMOTE_CTRL,
    MODE_NUM_MAX
};

/* 车轮方向 */
enum moving_direction {
    FRONT = 0,
    BACK,
};

enum drv_offset {
    DRV_OFFSET_MOTOR = 0,
    DRV_OFFSET_OP_SENSOR,
    DRV_OFFSET_MAX
};

/* P,I,D设定 */
struct pid {
    lg_s32 p;
    lg_s32 i;
    lg_s32 d;
};

struct trace_car_config {
    /* 运动策略 */
    /* 模式选择（遥控，pid) */
    /* 遥控模式指令相应前后左右 */
    /* 加减速 */
    /* 寻迹模式 */
    enum mode mode;
    enum moving_direction dir;
    lg_u16 speed;
    struct pid pid;

    /* 车轮驱动执行的采样时间 */
    lg_u16 sample_time_ms_motor;
    /* 传感器驱动执行的采样时间 */
    lg_u16 sample_time_ms_op_sensor;

    /* 光电对管采样时间间隔（回调） */
    /* 轮子执行扫描时间间隔（回调） */
    trace_car_callback motor_callback;
    trace_car_callback op_sensor_callback;

    /* 通用策略 */
    /* 爬坡时的策略 */
};

lg_bool trace_car_init(struct trace_car_config *car_config);
lg_bool trace_car_deinit(struct trace_car_config *car_config);
lg_bool trace_car_set_config(lg_void);
lg_bool trace_car_start(lg_void);
lg_bool trace_car_pause(lg_void);
lg_bool trace_car_stop(lg_void);
lg_void trace_car_process(lg_void);

lg_void trace_car_set_mode(enum mode mode);
lg_u32 trace_car_mnt_usr_callback(enum drv_offset offset, trace_car_callback fun);

#endif